package com.gh.blog.dto;

import com.github.pagehelper.PageInfo;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;

public interface Convert<DTO, ENTITY> {

    /**
     * 把ENTITY转换为DTO
     * @param entity
     * @return
     */
    default DTO convertFrom(ENTITY entity) {
        try {

            BeanUtils.copyProperties(entity, this);
            return (DTO)this;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("系统异常");
        }

    }

    /**
     * 把List<ENTITY>转换为List<DTO>
     * @param entities
     * @return
     */
    default List<DTO> convertFrom(List<ENTITY> entities) {
        List dtoList = new ArrayList();
        for (ENTITY entity : entities) {
            try {
                // 反射当前对象，Obj就是指的当前对象，也就是ArticleDTO
                Object dto = this.getClass().newInstance();

                // 拷贝参数，把entity中的参数数据，拷贝到obj
                BeanUtils.copyProperties(entity, dto);
                dtoList.add(dto);
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException("系统异常");
            }

        }
        return dtoList;
    }

    /**
     * 把page<ENTITY>转换为page<DTO>
     * @param page
     * @return
     */
    default PageInfo<DTO> convertFrom(PageInfo page) {
        // 把page<Article>的list取出，进行转换
        List<ENTITY> entities = page.getList();

        // 把Article的list转换为ArticleDTO的list
        List<DTO> dtos = convertFrom(entities);

        // 更换page的内容
        page.setList(dtos);
        return page;
    }
}
